//
// Created by admin on 2024/7/6.
//

#ifndef LINKLIST_H
#define LINKLIST_H

#include <stdio.h>
#include <stdlib.h>
#include "stdbool.h"

#ifdef __cplusplus
extern "C"
{
#endif


typedef struct Node{
    void *data;
    int root;
    struct Node *prev;
    struct Node *next;
} Node;

typedef struct LinkList{
    int size;
    Node *root;
    void  (*freeData)(void *data);
} LinkList;

typedef struct Iterator{
    int pos;
    Node *node;
    LinkList *linkList;
} Iterator;

LinkList *create(void  (*freeData)(void *data));

void addFirst(LinkList *linkList, void *data);

void addLast(LinkList *linkList, void *data);

void *indexGet(int i, LinkList *linkList);

void iterator(Iterator *iter,LinkList *linkList);

int hasNext(Iterator *iter);

void *next(Iterator *iter);

void delNode(Iterator *iter);


#ifdef __cplusplus
}
#endif

#endif
